/*
 * @Author: 生俊甫 1758142861@qq.com
 * @Date: 2025-01-14 16:50:41
 * @LastEditors: 生俊甫 1758142861@qq.com
 * @LastEditTime: 2025-01-15 15:05:32
 * @FilePath: /sjf/weChat_project/test_to_there/framework/spdlog_test/logger.hpp
 * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
 */
#include <iostream>
#include <gflags/gflags.h>
#include <spdlog/spdlog.h>
#include <spdlog/sinks/stdout_color_sinks.h>
#include <spdlog/sinks/basic_file_sink.h>

//定义全局的logger指针
std::shared_ptr<spdlog::logger> g_default_logger;

#define LOG_TRACE(format,...) g_default_logger->trace(std::string("[{}:{}] ") + format,__FILE__,__LINE__,##__VA_ARGS__);
#define LOG_DEBUG(format,...) g_default_logger->debug(std::string("[{}:{}] ") + format,__FILE__,__LINE__,##__VA_ARGS__);
#define LOG_INFO(format,...)  g_default_logger->info(std::string("[{}:{}] ") + format,__FILE__,__LINE__,##__VA_ARGS__);
#define LOG_WARN(format,...)  g_default_logger->warn(std::string("[{}:{}] ") + format,__FILE__,__LINE__,##__VA_ARGS__);
#define LOG_ERROR(format,...) g_default_logger->error(std::string("[{}:{}] ") + format,__FILE__,__LINE__,##__VA_ARGS__);
#define LOG_FATAL(format,...) g_default_logger->critical(std::string("[{}:{}] ") + format,__FILE__,__LINE__,##__VA_ARGS__);

/**
 * mode:表示模式(true表示发布模式,false表示调试模式)
 * 调试模式代表就是标准输出日志器，输出等级为最低开始
 * 发布模式代表的是文件输出日志器，输出等级为用户自定
 * 
 * file:表示为发布模式下所指定的log文件名
 * 
 * level:表示为发布模式下所指定的日志输出等级
 * TRACE     -- 0
 * DEBUG     -- 1
 * INFO      -- 2
 * WARN      -- 3
 * ERROR     -- 4
 * CRITICAL  -- 5
 */
void init_logger(bool mode,const std::string& file,int32_t level)
{
    if(mode == false)
    {
        //调试模式
        //创建同步日志器
        g_default_logger = spdlog::stdout_color_mt("default-logger");
        //设置为debug以上级别时进行刷新
        g_default_logger->flush_on(spdlog::level::level_enum::debug);
        //设置全局的日志输出等级
        g_default_logger->set_level(spdlog::level::level_enum::debug);
    }
    else if(mode == true)
    {
        //发布模式
        //创建同步日志器
        g_default_logger = spdlog::basic_logger_mt("fdefault-logger",file);
        //or异步
        //g_default_logger = spdlog::basic_logger_mt<spdlog::async_factory>("file-logger","async.log");
        g_default_logger->flush_on((spdlog::level::level_enum)level);
        g_default_logger->set_level((spdlog::level::level_enum)level);
    }
    //设置日志输出格式
    g_default_logger->set_pattern("[%Y-%m-%d %H:%M:%S][%t][%-8l]%v");
}